window: Fix state updates
authorMatthias Clasen <mclasen@redhat.com>
Fri, 23 Oct 2020 15:51:02 +0000 (11:51 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 23 Oct 2020 15:51:02 +0000 (11:51 -0400)
When the compositor unmaximized the window, we get a
state-changed signal, and we update the maximized field.
But then we go and recompute our layout based on the
maximize_initially field, and that is still TRUE, when
we were maximized initially. So we need to update both
fields.

This fixes a problem where using the window menu to
unmaximize an initially maximized window would not
work.

Fixes: #3226
gtk/gtkwindow.c

index 3f59e4e02c6f15478a690bebe616359d0245600f..feec52aa22683e61c1d117e14d40df75c2aac8aa 100644 (file)
@@ -4702,11 +4702,16 @@ surface_state_changed (GtkWidget *widget)
     }
 
   if (changed_mask & GDK_TOPLEVEL_STATE_FULLSCREEN)
-    priv->fullscreen = (new_surface_state & GDK_TOPLEVEL_STATE_FULLSCREEN) ? TRUE : FALSE;
+    {
+      priv->fullscreen = (new_surface_state & GDK_TOPLEVEL_STATE_FULLSCREEN) ? TRUE : FALSE;
+      priv->fullscreen_initially = priv->fullscreen;
+    }
 
   if (changed_mask & GDK_TOPLEVEL_STATE_MAXIMIZED)
     {
       priv->maximized = (new_surface_state & GDK_TOPLEVEL_STATE_MAXIMIZED) ? TRUE : FALSE;
+      priv->maximize_initially = priv->maximized;
+
       g_object_notify_by_pspec (G_OBJECT (widget), window_props[PROP_IS_MAXIMIZED]);
     }